package crypto.process;

import crypto.reference.References;

/**
 * DOCUMENT ME!
 *
 * @author gato
 */
public class CompleteBlock {

    private int block = 0;
    private int originalSize = 0;

    /**
     * Metodo que toma el texto ingresado y calcula cuantos son los caracteres que se necesitan
     * para completar el bloque para que sea multiplo de 500 para normalizar el texto en una
     * cantidad fija.
     *
     * @param text [String]
     *
     * @return texto normalizado [String]
     */
    public String block(String text) {
        //Almaceno el tamaño original del mensaje
        this.originalSize = text.length();

        /*Determino la cantidad de veces que se encriptara,
        basandome en cuantos grupos de 500 caracteres tengo*/
        block = text.length();

        int longText = getBlocks();

        //determino la cantidad de bloque para el caso que es 500/500 y no parezca 2 bloques
        --block;
        block = (int) ((getBlocks() / 500) + 1);

        //Calculo cuantos caracteres faltan para completar la/s unidad/es de 500
        int sizeArray = 500 * getBlocks();
        sizeArray = sizeArray - longText;

        String space = "";

        while (sizeArray > 0) {
            space += " ";
            sizeArray--;
        }

        text += space;

        return text;
    }

    public String restoreBlock(String text, References reference) {

        int lastPosition = reference.getPosFinal();
        text = text.substring(0, lastPosition);

        return text;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int getBlocks() {
        return block;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int getOriginalSize() {
        return originalSize;
    }
}
